package com.jml.链表;

/*
* 删除链表中等于给定值 val 的所有节点。

示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

递归思路：找到最后的哪个节点
1->2->6->3->4->5  6
1->2->6->3->4     5->6
1->2->6->3        4->5->6
1->2->6           3->4->5->6
1->2              6->3->4->5->6
1                 2->6->3->4->5->6
1->2->6->3->4->5->6
* */

public class 递归删除所有指定元素 {

    public ListNode removeElements(ListNode head, int val) {
        if(head==null){
            return null;
        }
        //res表示头结点后的链表，而且该链表已经删除完毕了指定的val
        ListNode res = removeElements(head.next, val);
        //检查头结点是否是要删除的节点
        if(head.val==val){
            return res;
        }else{
            head.next=res;
            return head;
        }
    }

    public static void main(String[] args) {
        int[] nums = {1, 2, 6, 3, 4, 5, 6};
        ListNode head = new ListNode(nums);
        System.out.println(head);
        ListNode res = (new 递归删除所有指定元素()).removeElements(head, 6);
        System.out.println(res);
    }

}
